iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

今日的行程:

讀書室:21:35 - 23:00

正片開始

Linker (LD) 是個博大精深的學問,好像從來沒有弄得很清楚過~
2本書上提到的大致上相同,RISC-V 多了一個 relaxation 的部分,
所以大概可以總結成三個部分,Linker script 語法、load relocation、linker relaxation。

Linker 主要功能就是要把不同 object files 裡面不同的 section 和 symbol 蒐集起來,然後以某種格式 (例如 ELF) 組合成一個檔案,早期並沒有 linker 概念,而是由 OS 的 loader (LD) 來完成這些事情,但現在的軟體和系統越來越複雜,所以發展出了 linker,而 LD 就也成了 linker 的代名詞。

Linker Script 語法

Linker script 是用來告訴 linker 要以怎樣的方式,來組合蒐集起來的 sections 和 symbols

Load Relocation

在一個系統開機的實際狀況會是 chain loading 的過程,而最前期的 loader 通常會在 ROM (or SRAM) 上,主要目的就是做好 DDR training 然後把接下來的執行環境,轉移到 RAM 上執行,所以會有 link address、load address (LMA)、virtual address (VMA) 不同的情形,這時候就會需要 load Relocation 來達成轉移執行環境的目的。

Linker Relaxation

compiler 在編譯階段,不會知道所有的 symbol 最終的 address,所以編譯產生的指令會比較保守,通常會有一些 PC-relative 的指令來取的最終的 address,但某些 symbol 只要在 linking 階段就可以知道最終 address 了,所以 linker 可以在此時作 relaxation optimization,利用更少的指令取得最終的 address。

總結


上一篇
[鐵人賽] Day 20 RISC-V Kernel Page Table
下一篇
[鐵人賽] Day 22 ARM 第 10 章節 Inline Assembly
系列文
上班辦公室,下班讀書室:RISC-V / ARM64 體系結構編程與實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言